A solid-state drive (SSD)/non-volatile memory controller sits between a host and a non-volatile memory, such as flash memory. A non-volatile memory read request may originate externally from the host or internally from the controller. Typically the purpose of the read request is to retrieve some data stored in the non-volatile memory. A primary task of a read policy is to return the correct data. To ensure the data stored on the non-volatile memory is returned corrected (without errors), error correction codes (ECC) are used. An ECC decoder in the controller corrects the raw data read from the non-volatile memory. Various ECC codes can be used, such as BCH (Bose Chaudhuri Hocquenghem) code, LDPC (low-density parity-check) code, and convolutional codes. The ECC decoder operates on the granularity of a codeword (of fixed or variable size), referred to as an e-page.
Under normal conditions, the ECC decoder can correct errors in the raw e-page using on-the-fly decoding and return the corrected e-page (and/or other requested data, such as statistics) immediately. In such cases, the read operation for the particular e-page is considered complete. As flash memory, for example, scales below 30 nm, and moves towards more bits per cell, such on-the-fly decoding may not be successful when the data stored in the flash memory suffers from a number of noise sources such as program and erase (P/E) cycling (endurance), retention, cell-to-cell coupling, read disturb, etc. Flash memory vendors have started providing retry read commands to be used when on-the-fly read decoding fails. The controller can also perform various retry tasks when on-the-fly read decoding fails. Examples of the retry tasks are: additional reads with the same or different reference voltage (Vref), ECC re-decoding of different decoder inputs and/or parameters, digital signal processing techniques, higher-level redundancy functions using a redundancy code such as a RAID-like code, etc. However, any retry takes extra time and therefore incurs a penalty in performance. If retry happens too frequently or retry takes too long, the incurred performance loss becomes unacceptable.
It would be desirable to have a policy for read operations addressing on-the-fly decoding failure in non-volatile memory (NVM).